package com.hr.system.controller;


import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.hr.common.retrun.R;
import com.hr.common.service.RedisService;
import com.hr.system.entity.SysUser;
import com.hr.system.entity.vo.LoginUser;
import com.hr.system.service.SysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/login")
@Api(tags = "用户管理")
@CrossOrigin
public class LoginController {
    @Autowired
    private SysUserService sysUserService;
    @Autowired //先通过名称匹配，如果没有匹配到，再通过类型匹配
    private RedisService redisService;
    @Resource
    private RedisTemplate redisTemplate;
    // 测试登录，浏览器访问： http://localhost:8081/user/doLogin?username=zhang&password=123456
    @ApiOperation("登录")
    @PostMapping("login")
    public R doLogin(@RequestBody SysUser user) {
        LoginUser login = sysUserService.login(user);
        if(login!=null) {
            //sa-token 集成了 redis 登录信息不需要再手动添加到 redis 中
            StpUtil.login(login.getUser().getId());
            // 获取当前会话的 token 信息参数
            SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
            login.setToken(tokenInfo.getTokenValue());
            StpUtil.getSession().set("loginUser",login);
            return R.ok("登录成功",login);
        }
        return R.error("失败");
    }

    // 测试注销  ---- http://localhost:8081/acc/logout
    @ApiOperation("测试注销")
    @GetMapping("logout")
    public R logout() {
        StpUtil.logout();
        return R.ok("成功");
    }
//    @SaCheckPermission("user.add")
//    @ApiOperation("测试add")
//    @GetMapping("add")
//    public R add() {
//        if (StpUtil.hasPermission("user.add")){
//            return R.ok("add成功");
//        }
//        else
//            return R.error("无权限");
//
//    }
//    @SaCheckPermission("user.delete")
//    @ApiOperation("delete")
//    @GetMapping("delete")
//    public R delete() {
//            return R.ok("delete ok!!!");
//    }
//
//    @ApiOperation("handler")
//    @GetMapping("handler")
//    public R handler() {
//        return R.ok("handler ok!!!");
//    }
}
